import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
import pandas as pd
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False   # 解决负号显示问题
# 加载数据集
data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
# 绘制散点图
plt.figure(figsize=(10, 6))
markers = {0: "s", 1: "X"}
palette = {0: "lightblue", 1: "darkred"}
ax = sns.scatterplot(
     x='mean concavity', 
    y='mean concave points', 
    hue='target',   # 根据 target 分类颜色
    style='target', # 根据 target 分类形状
    markers=markers, # 使用自定义形状
    data=df,
    palette=palette
)
# 获取图例句柄和标签
handles, labels = ax.get_legend_handles_labels()
# 手动设置图例，确保顺序正确
plt.legend(handles, ['恶性', '良性'], title='目标', title_fontsize='12', fontsize='12')
plt.title('威斯康星州乳腺癌良性肿瘤与恶性肿瘤的平均凹陷与平均凹陷点的关系',fontsize='16')
plt.xlabel('平均凹陷',fontsize='14')
plt.ylabel('平均凹陷点',fontsize='14')
plt.show()